In many instances, there is a requirement for an application executing on a node, say Node A, to communicate with another Node, say Node C, but there may be no direct communication possible and thus Node A sends the communication via one or more intermediate nodes, say Node B, which relays the communication to Node C. Typically, Node B would unmarshal the message and find out the message is intended for Node C. Node B would then re-marshal the message and then send the message to node C on behalf of node A.
One of the problems with this system is that it is inefficient and can have a performance penalty. An intermediate node wastes time and resources on unmarshalling and marshalling a message that is not intended for it. More importantly if node B needs to unmarshal the message for node A, it needs to have the knowledge of a Data Transfer Object (DTO) of the class to be unmarshalled, which sometimes is unavailable to node B. If the message were encrypted, node B would also need to have the knowledge of the private key to decrypt the message, which again, is not always available.
What is required is an improved system and method for non-direct communication between nodes.